/*
 * CStringVector.h
 *
 */

#ifndef CSTRINGVECTOR_H_
#define CSTRINGVECTOR_H_

#include <vector>
#include <string>
#include <iostream>

class CStringVector {
	private:
		static char* end;
		std::vector<char*> vars;
	public:
		/** Crea y manipula un vector de c_strings dinámicamente.
		 * Cada elemento es un c_string dinámico.
		 */
		CStringVector();
		virtual ~CStringVector();

		/**
		 * Agrega una copia del elemento argument como c_string al inicio.
		 */
		CStringVector& pushFront(const std::string& argument);

		/**
		 * Agrega una copia del elemento argument como c_string al final.
		 */
		CStringVector& pushBack(const std::string& argument);

		/**
		 * Libera y elimina al primer elemento.
		 */
		CStringVector& popFront();

		/**
		 * Libera y elimina al último elemento antes del fin de cadena.
		 */
		CStringVector& popBack();

		/**
		 * Libera y elimina todos los elementos y deja el fin de cadena.
		 */
		void clear();

		/**
		 * Devuelve una referencia constante al primer elemento del vector.
		 */
		const char* getFront();

		/**
		 * Devuelve una referencia al vector que contiene todos los elementos.
		 */
		char** get();

		/**
		 * Carga el contenido del vector en un std::ostream.
		 */
		friend std::ostream& operator<<(std::ostream& o, const CStringVector& e);
};

#endif /* CSTRINGVECTOR_H_ */
